package org.promote.hotspot.common.coder;

import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.MessageToByteEncoder;
import lombok.extern.java.Log;
import org.promote.hotspot.common.model.HotSpotMsg;
import org.promote.hotspot.common.tool.Constant;
import org.promote.hotspot.common.tool.ProtostuffUtils;

import java.io.UnsupportedEncodingException;
import java.util.Arrays;

/**
 * @author enping.jep
 * @date 2023/11/15 12:49
 **/
@Log
public class MsgEncoder extends MessageToByteEncoder {

    @Override
    public void encode(ChannelHandlerContext ctx, Object in, ByteBuf out) {
        if (in instanceof HotSpotMsg) {
//            log.info("发送数据：" + in.toString());
            byte[] bytes = ProtostuffUtils.serialize(in);
            byte[] delimiter = Constant.DELIMITER.getBytes();
            //目标数组
            byte[] dest = new byte[bytes.length + delimiter.length];
            //第一个参数是要被复制的数组
            //第二个参数是被复制的数字开始复制的下标
            //第三个参数是目标数组，也就是要把数据放进来的数组
            //第四个参数是从目标数据第几个下标开始放入数据
            //第五个参数表示从被复制的数组中拿几个数值放到目标数组中
            System.arraycopy(bytes, 0, dest, 0, bytes.length);
            System.arraycopy(delimiter, 0, dest, bytes.length, delimiter.length);
            out.writeBytes(dest);
        }
    }

}
